extreme beakl wi

friday, 21 october 2022

if BEAKL Wi-v is a variant of BEAKL Wi, then..

beakl wi-x

Corne BEAKL Wi</span> extreme

is the logical extension of it to the extreme, moving the Z to the pinkie home row and the X to the ring finger reach of the pinkie top row. The Stagger key on this layout cycles through the two pinkie staggered variants and the familiar home row BEAKL Wi layout.

It is the logical conclusion of BEAKL pinkie finger avoidance, penalizing the home row as a pinkie reach—from the pinkie stagger position of BEAKL Wi-v—in deference to the ring finger reach to the corner X. This is a layout designed specifically for elbows to side, arms extended, palms down (resting) lap top typing.

This is not to be confused with “laptop” keyboard (computer) typing which would place the keyboard section much closer to the hips when resting on one’s lap, thus, changing the hand position and reach of the pinkies—extending—considerably. BEAKL Wi would be the layout of choice here, illustrating how the slightest changes in hand positioning affect the optimal layout.

metrics

using the same keyboard evaluator, the former pinkie top row penalties are swapped with the variant’s home row weighting assignments..

[weights] 10.0 7.0 2.0 1.0 1.0 4.0 4.0 1.0 1.0 2.0 7.0 10.0 16.0 12.0 1.0 0.5 0.5 1.5 1.5 0.5 0.5 1.0 12.0 16.0 9.0 5.0 2.5 2.0 1.5 5.0 5.0 1.5 2.0 2.5 5.0 9.0 // rest pinkie on lower row of corne! 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5

and correspondingly mapping the thumb to pinkie row penalties..

[penalties] ,same_row,row_jump1,row_jump2,row_jump3 ii, 2.5, 3.5, 4.5, 0.0 // same finger im, 0.5, 1.0, 2.0, 0.0 ir, 0.5, 1.0, 1.5, 0.0 ip, 0.5, 1.0, 1.5, 0.0 mi, -1.5, -0.5, 1.5, 0.0 // inward roll mm, 2.5, 3.5, 4.5, 0.0 // same finger mr, 0.5, 1.0, 2.0, 0.0 mp, 1.0, 1.5, 2.5, 0.0 ri, -1.5, -0.5, 1.5, 0.0 // inward roll rm, 1.0, 1.5, 2.5, 0.0 // inward roll rr, 3.0, 4.0, 5.0, 0.0 // same finger rp, 3.0, 4.5, 7.0, 0.0 pi, -1.0, 0.0, 1.0, 0.0 // inward roll pm, 1.0, 2.0, 3.0, 0.0 // inward roll pr, 4.0, 5.0, 6.5, 0.0 // inward roll pp, 5.0, 6.0, 8.0, 0.0 // same finger it, 0.5, 1.5, 0.5, 1.0 ti, 0.5, 1.5, 0.5, 1.0 mt, 0.5, 1.5, 0.5, 1.0 tm, 0.5, 1.5, 0.5, 1.0 rt, 0.5, 1.5, 0.5, 1.0 tr, 0.5, 1.5, 0.5, 1.0 pt, 0.5, 0.5, 1.5, 1.0 // lazy pinkie position tp, 0.5, 0.5, 1.5, 1.0 // lazy pinkie position tt, 2.0, 3.0, 2.0, 2.5 // same finger

yielding the following comparison..

With lazy pinkie position ring finger preference

  en fr es de
BEAKL Wi-x 38.95 39.85 40.48 43.19
BEAKL Wi-v 39.12 40.33 40.10 41.39
BEAKL Wi 41.06 42.00 41.85 43.29
BEAKL Zi 43.74 39.40 39.98 45.88
BEAKL 15 52.82 55.98 47.03 52.49
BEAKL 19bis 65.90 56.76 51.12 61.70
BEAKL 19 66.85 64.31 52.50 58.01
BEAKL 19 Opt French 67.66 48.18 45.38 67.22
qgmlwyfub 70.78 69.24 60.08 71.78
Carpalx 71.03 70.03 60.71 73.94
Neo 72.19 91.77 76.81 72.08
Minimak-8key 76.06 90.39 93.77 68.93
Oneproduct 89.08 86.94 73.59 94.57
Norman 89.48 90.54 93.95 80.42
Hands down 90.52 110.54 110.59 85.33
MTGAP “shortcuts” 90.55 102.43 85.87 94.17
Kaehi 92.21 100.52 87.22 102.13
MTGAP “ergonomic” 92.76 96.40 92.95 77.66
MTGAP 93.14 104.93 88.30 99.14
Three 93.32 105.30 99.34 78.14
Colemak DHm 94.47 99.44 113.78 72.14
ASSET 94.56 107.07 109.78 93.58
Colemak DHm mod 94.79 91.42 113.78 72.14
Notarize 95.09 107.66 112.59 91.35
Colemak 95.12 99.35 114.00 74.14
MTGAP “standard” 95.40 98.55 95.60 78.86
Soul mod 95.54 100.80 115.17 70.43
MTGAP 2.0 96.17 99.14 94.59 75.86
Workman 96.48 111.28 113.52 91.63
Colemak DH 96.74 102.60 117.00 73.76
Azerty 97.90 106.25 104.91 91.18
Niro mod 98.24 104.50 119.55 75.25
MTGAP “Easy” 98.88 110.64 113.08 88.62
Dvorak 99.71 119.29 120.94 95.38
Qwerty 100.00 112.45 111.78 92.29
Qwertz 100.87 110.90 114.28 91.14
White 101.23 113.65 112.86 92.62
Bépo 40% 114.55 105.86 120.00 122.90
Qwpr 115.32 136.45 135.54 124.31
Bépo keyberon 117.34 105.15 120.07 125.61
Coeur 120.27 100.73 112.57 122.80

Penalizing the home row pinkie severely alters the rankings considerably. The core BEAKL weightings maintain the rankings for layouts that avoid pinkie finger usage, while several other layouts end up placing lower than the QWERTY layouts—again emphasizing the extreme constraints of this layout design.

The keyboard layout evaluator always sets QWERTY as the baseline at 100.00 and all other layouts relative to this. It is interesting that each of the BEAKL Wi iterations further separate themselves from the pack, the scores improving successively—from 45.43 to 42.88 to 38.95. This is due, of course, to the unique weighting and penalty scheme applied for each iteration to reflect the objectives of the layout—but interesting nonetheless. There may, after all, be a correlation to the “comfort” level of the layout.

q roll

in theory, with the above pinkie finger weightings, the Q should have benefited with a move to the upper corner as the X—this does in fact bear out with the even better keyboard evaluator ranking!

However, in practice, the QU pinkie-index finger roll avoids the more awkward ring-index finger roll extension. Hence, the Q remains on the home row for the pinkie finger—an example of biomechanics over calculated numbers. YMMV.

stagger

while there are six possible Z V X character combinations, only Z V X (BEAKL Wi), Z X V (BEAKL Wi-v) and X Z V are suitable layout candidates with the V as the pinkie home position on the home row or stagger (bottom) row.

A simple modification to the keymap file and associated layouts allows toggling all three pinkie finger combinations with keycodes..

enum keyboard_keycodes { BASE = SAFE_RANGE ... ,STAGGER // cycle pinkie home row stagger 0 -> 1 -> 2 ,HOME3 // <pinkie> ,HOME2 // pseudo GUI_T(<pinkie>) ,HOME1 // <pinkie> ,KEY3 // <pinkie> ,KEY2 // <pinkie> ,KEY1 // <pinkie> ,SHIFT3 // SFT(<pinkie>) ,SHIFT2 // SFT(<pinkie>) ,SHIFT1 // SFT(<pinkie>) ...

referencing a keycode array..

static uint16_t pinkies[][3] = { {KC_X, KC_V, KC_Z}, // ZVX beakl wi (row 3 -> 1) {KC_V, KC_X, KC_Z}, // ZXV beakl wi-v {KC_V, KC_Z, KC_X} }; // XZV beakl wi-x static uint8_t stagger = PINKIE_STAGGER; #define PINKIE(r) pinkies[stagger][r - 1] bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { ... case HOME3: mod_roll(record, 0, PINKIE(3), 9); return false; case HOME2: mod_roll(record, KC_RGUI, PINKIE(2), 9); break; case HOME1: mod_roll(record, 0, PINKIE(1), 9); return false; case KEY3: send(record, NOSHIFT, PINKIE(3)); break; case KEY2: send(record, NOSHIFT, PINKIE(2)); break; case KEY1: send(record, NOSHIFT, PINKIE(1)); break; case SHIFT3: send(record, SHIFT, PINKIE(3)); break; case SHIFT2: send(record, SHIFT, PINKIE(2)); break; case SHIFT1: send(record, SHIFT, PINKIE(1)); break; ...

whose letter combinations can be cycled from the Stagger key..

case STAGGER: if (KEY_DOWN) { stagger = stagger == 0 ? 1 : (stagger == 1 ? 2 : 0); } break; ...

with an initial config.h setting..

// initial pinkie stagger position (0) beakl wi home row (1) wi-v stagger (2) wi-x stagger #define PINKIE_STAGGER 2

Cycling through the three pinkie letter combinations allows tuning the layout dependent on one’s hand positioning for typing. The left hand pinkie column remains fixed—the J already in the stagger position (bottom row) and the QU bigram roll favouring the Q on the home row.

final thoughts

the Z on the home row is strikingly unusual. While the path to this layout long ago placed the Q on the opposite hand pinkie home row, there is a pleasing unintentional symmetry to this arrangement of the two least used letters.

It is an interesting experiment. And if anything, illustrates how many variables there are to keyboard layout design when one considers keyboard placement, single or split, column stagger (angle and tenting), hand separation and individual biomechanics. Not to mention the “feel” keyboard hardware components—keyswitch design, spring resistance, keycap material and profiles—impart.

Quite obviously, this layout only works for hands which find the ring finger corner reach for X preferable to a pinkie finger reach to the home row for the letter—with palms down typing i find the ring finger reach avoids the subtle upward hand position shift required for the pinkie reach, as well as, being the naturally stronger finger. YMMV as to whether this layout feels better than BEAKL Wi or its variant BEAKL Wi-v.

This layout is growing on me but given the frequency of the X and Z letters it is hardly an obvious choice—which is also reflected in the metrics above—though, for this set of hands, the increased comfort level is unmistakable. A typing corpus emphasizing these letters renders the distinction. Of the small set of words containing Z, there are a number containing ZZ which clearly illustrate how much weaker the pinkie is to the other fingers. The X by comparison does not suffer such words (in English) unless one is in the habit of typing Roman numerals.

i am using this layout now. It capitalizes on the finger memory instilled by BEAKL Zi, so feels strongly familiar.. only better this second time around. Barring further tweaks to this layout (who am i kidding :-), i may finally have found a layout for all seasons..

todo

migrate sources for BEAKL Wi-x to BEAKL Wi-v and BEAKL Wi. All that is required is to set the STAGGER in the config.h accordingly for each.

»»  gotchas

comment ?